package com.huluobo.mvvm_base.mvvm.net;

import com.huluobo.mvvm_base.mvvm.bean.BannerBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.CommentBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.FollowBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.GetLikeVideoBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.GiftBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.LikeVideoBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.PushBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.SettingBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.StopPushBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.UserBeanResult;
import com.huluobo.mvvm_base.mvvm.bean.VideoBeanResult;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by LC on 2024/2/22.
 * 存放所有接口地址,所有方法的返回值是一个Observable(被观察者)
 */
public interface ApiService {
    //登录接口返回
    @POST(Const.URL_LOGIN)
    Observable<UserBeanResult> login(@Body RequestBody body);

    //注册接口返回
    @POST(Const.URL_REGISTER)
    Observable<UserBeanResult> register(@Body RequestBody body);

    //首页获取视频列表接口
    @GET(Const.URL_VIDEO_LIST)
    Observable<VideoBeanResult> getVideoList(@Query(Const.PARAM_CURRENT_PAGE) int currentPage,
                                             @Query(Const.PARAM_PAGE_SIZE) int pageSize);

    //首页banner接口
    @GET(Const.URL_BANNER)
    Observable<BannerBeanResult> getBanner();

    //点赞接口
    @POST(Const.URL_LIKE_VIDEO)
    Observable<LikeVideoBeanResult> likeVideo(@Query(Const.PARAM_VIDEO_ID) int videoId);

    //取消点赞接口
    @POST(Const.URL_NO_LIKE_VIDEO)
    Observable<LikeVideoBeanResult> noLikeVideo(@Query(Const.PARAM_VIDEO_ID) int videoId);

    //关注接口
    @POST(Const.URL_FOLLOW)
    Observable<FollowBeanResult> followAuth(@Body RequestBody body);

    //根据视频id获取评论列表
    @GET(Const.URL_GET_COMMENT_BY_VIDEO_ID)
    Observable<CommentBeanResult> getCommentByVideoId(@Query(Const.PARAM_VIDEO_ID) int videoId);

    //发表评论接口
    @POST(Const.URL_SEND_COMMENT)
    Observable<CommentBeanResult> sendComment(@Body RequestBody body);

    //取消关注接口
    @POST(Const.URL_NO_FOLLOW)
    Observable<FollowBeanResult> noFollowAuth(@Body RequestBody body);

    //礼物接口
    @GET(Const.URL_GIFT)
    Observable<GiftBeanResult> getGiftList();

    //开播接口
    @POST(Const.URL_PUSH)
    Observable<PushBeanResult> startPush(@Body RequestBody body);

    //下播
    @POST(Const.URL_STOP_PUSH)
    Observable<StopPushBeanResult> stopPush();

    //获取点赞视频
    @POST(Const.URL_GET_LIKE_VIDEOS)
    Observable<GetLikeVideoBeanResult> getLikeVideos();

    @POST(Const.URL_UPDATE_ADDRESS)
    Observable<SettingBeanResult> updateAddress(@Query(Const.PARAM_ADDRESS) String address);

    //上传文件必须要有Part类型 类似键值对,可以传递一个带key的文件到服务器
    //注意,上传头像必须要添加一个    @Multipart的注解
    @Multipart
    @POST(Const.URL_UPDATE_ICON)
    Observable<SettingBeanResult> updateIcon(@Part MultipartBody.Part part);

    @POST(Const.URL_UPDATE_BRITH)
    Observable<SettingBeanResult> updateBrith(@Query(Const.PARAM_BRITH) String brith);

    @POST(Const.URL_UPDATE_NICKNAME)
    Observable<SettingBeanResult> updateNickname(@Query(Const.PARAM_NICKNAME) String nickname);

    @POST(Const.URL_UPDATE_SEX)
    Observable<SettingBeanResult> updateSex(@Query(Const.PARAM_SEX) String sex);
}
